Computer systems have achieved wide usage in modern society. During operation, a computer system processes and stores data at a speed and at a level of accuracy many times that which can be performed manually. Successive generations of computer systems have permitted ever-increasing amounts of data to be processed at ever-increasing rates.
Computer systems are sometimes operated as stand-alone devices or connected together by way of network connections, typically together with a network server, to form a computer network. When networked together, communication between the separate computer systems is possible. Files and other data, stored or generated at one computer system, can be transferred to another computer system.
A conventional computer system typically includes one or more Central Processing Units (CPUs) capable of executing algorithms forming applications and a computer main memory. Peripheral devices, both those embedded together with a CPU or constructed to be separate therefrom, also typically form portions of a conventional computer system. Computer peripheral devices include, for instance, video graphics adapters, Local Area Network (LAN) interfaces, Small Computer System Interface (SCSI) bus adapters, and mass storage devices, such as disk drive assemblies.
A computer system further typically includes computer buses which permit the communication of data between various portions of the computer system. For example, a host bus, a memory bus, at least one high-speed bus, a local peripheral expansion bus, and one or more additional peripheral buses form portions of a typical computer system.
A peripheral bus is formed, for instance, of a SCSI bus, an Extension to Industry Standard Architecture (EISA) bus, an Industry Standard Architecture (ISA) bus, or a Peripheral Component Interface (PCI) bus. The peripheral bus forms a communication path to and from a peripheral device connected thereto. The computer system CPU, or a plurality of CPUs in a multi-processor system, communicates with a computer peripheral device by way of a computer bus, such as one or more of the computer buses noted above.
A computer peripheral, depending upon its data transfer speed requirements, is connected to an appropriate peripheral bus, typically by way of a bus bridge that detects required actions, arbitrates, and translates both data and addresses between the various buses.
A computer peripheral device forming a portion of a single computer system might well be supplied by a manufacturer other than the manufacturer of the computer CPU. If the computer system contains more than one peripheral device, the peripheral devices might also be supplied by different manufacturers. Furthermore, the computer system may be operable pursuant to any of several different operating systems. The various combinations of computer peripheral devices and computer operating systems of which a computer system might be formed quickly becomes quite large.
Software drivers are typically required for each computer peripheral device to effectuate its operation. A software driver must be specifically tailored to operate in conjunction with the particular operating system operating on the computer. A multiplicity of software drivers might have to be created for a single computer peripheral to ensure that a computer peripheral device is operable together with any of the different operating systems.
The complexity resulting from such a requirement has led, at least in part, to the development of an Intelligent Input/Output (I.sub.2 O) standard specification. The I.sub.2 O standard specification sets forth, inter alia, standards for an I/O device driver architecture that is independent of both the specific peripheral device being controlled and the operating system of the computer system to which the device driver is to be installed.
In the I.sub.2 O standard specification, the portion of the driver that is responsible for managing the peripheral device is logically separated from the specific implementation details of the operating system with which is to be installed. Because of this, the part of the driver that manages the peripheral device is portable across different computers and operating systems. The I.sub.2 O standard specification also generalizes the nature of communication between the host computer system and peripheral hardware; thus, providing processor and bus technology independence.
The "split driver" model of the I.sub.2 O specification, described above, allows peripheral devices to communicate directly between each other using what is referred to as Peer-to-Peer communication. Peer-to-Peer communication allows data to be transferred between two or more devices, with little or no involvement by the host operating system. To effectuate Peer-to-Peer communication, a Peer-to-Peer Operating System Module (Peer-to-Peer OSM) performs a discovery operation to create a Peer Availability Matrix during setup and initialization of the computer system. The Peer Availability Matrix contains information listing IOPs and peer objects which are available for communicating using Peer-to-Peer communication. During the discovery operation, the Peer-to-Peer OSM instructs each Integrated Real Time Operating Systems (IRTOS) controlling respective IOPs to create a list of all peer objects operating within the respective IOPs. The IRTOS of each IOP creates a list and forwards the list to the Peer-to-Peer OSM.
Network servers are often designed to include a host computer system and an Input/Output subsystem (I/O subsystem) wherein the I/O subsystem further includes various peripheral devices. A network server often operates in a clustered computing environment containing various other network servers and computing devices. When a network server fails, its I/O subsystem is unavailable to other network servers and computing devices in the clustered computing environment. The I/O subsystem, including the peripheral devices, are unavailable even when the Input/Output subsystem and peripheral devices are capable of functioning normally.
It would be advantageous, therefore, to devise a method and apparatus for performing a failover recovery which allows a normally functioning Input/Output subsystem, including associated peripheral devices, to remain available to other computing devices in a clustered computing environment even though a failure has occurred in the network server. It would further be advantageous if the method and apparatus utilized Peer-to-Peer communication, available on 120 compliant devices, to effectuate the failover recovery.